import cv2
import numpy as np


def showImg(winName, img):
    cv2.imshow(winName, img)  # 显示缩放图像
    cv2.waitKey()  # 按下任何键盘按键后
    cv2.destroyAllWindows()  # 释放所有窗体

def scaleImg(img):
    dst1 = cv2.resize(img, (100, 100))  # 按照宽100像素、高100像素的大小进行缩放
    dst2 = cv2.resize(img, (600, 600))  # 按照宽400像素、高400像素的大小进行缩放
    dst3 = cv2.resize(img, None, fx=1 / 3, fy=1 / 2)
    dst4 = cv2.resize(img, None, fx=1.5, fy=1.5)  # 将宽高扩大1.5倍
    cv2.imshow("dst1", dst1)  # 显示缩放图像
    cv2.imshow("dst2", dst2)  # 显示缩放图像
    cv2.imshow("dst3", dst3)  # 显示缩放图像
    cv2.imshow("dst4", dst4)  # 显示缩放图像
    cv2.waitKey()  # 按下任何键盘按键后
    cv2.destroyAllWindows()  # 释放所有窗体


def flipImg(img):
    dst1 = cv2.flip(img, 0)  # 沿X轴翻转
    dst2 = cv2.flip(img, 1)  # 沿Y轴翻转
    dst3 = cv2.flip(img, -1)  # 同时沿X轴、Y轴翻转
    cv2.imshow("img", img)  # 显示原图
    cv2.imshow("dst1", dst1)  # 显示翻转之后的图像
    cv2.imshow("dst2", dst2)
    cv2.imshow("dst3", dst3)
    cv2.waitKey()  # 按下任何键盘按键后
    cv2.destroyAllWindows()  # 释放所有窗体


def affineImg(img):
    rows = len(img)  # 图像像素行数
    cols = len(img[0])  # 图像像素列数
    M = np.float32([[1, 0, 50],  # 横坐标向右移动50像素
                    [0, 1, 100]])  # 纵坐标向下移动100像素
    dst = cv2.warpAffine(img, M, (cols, rows))
    cv2.imshow("img", img)  # 显示原图
    cv2.imshow("dst", dst)  # 显示仿射变换效果
    cv2.waitKey()  # 按下任何键盘按键后
    cv2.destroyAllWindows()  # 释放所有窗体

if __name__ == '__main__':
    img = cv2.imread("E:/3.png")  # 读取图像
    # scaleImg(img)
    #flipImg(img)
    affineImg(img)